package lexico;

import tabla_simbolos.Array;
import tabla_simbolos.Procedimiento;
import tabla_simbolos.Puntero;
import tabla_simbolos.Registro;
import tabla_simbolos.Variable;


public class Declaracion {
	/*Atributos*/
	public enum Tipo{var, pvar, tipo, procedimiento, literal_booleano, literal_entero, literal_natural, literal_caracter, ref};
	public enum TipoTipo{ref, array, puntero, registro};
	
	// Aqui es donde digo que si tiene que haber un pend??
	ArrayList<String> pend;   //???pq al llamar al D(); tiene que devolver tambien pend no??
	
	private Tipo tipo;
	private TipoTipo t;
	private String id;
	private Registro propsReg;
	private Puntero propsPunt;
	private Array propsArray;
	private Procedimiento propsProc;
	private Variable propsVar;
	
	/*Constructora*/
	public Declaracion(String id,Tipo tipo){
		this.setTipo(tipo);
		this.setLexema(id);
	}
	
	/*Get & Set*/
	public void setTipo(Tipo tipo) {this.tipo = tipo;}
	public Tipo getTipo() {return tipo;}
	public void setTipoTipo(TipoTipo tipo) {this.t = tipo;}
	public TipoTipo getTipoTipo() {return t;}
	public void setLexema(String id) {this.id = id;}
	public String getLexema() {return id;}
	public void setPropsReg(Registro propsReg) {this.propsReg = propsReg;}
	public Registro getPropsReg() {return propsReg;}
	public void setPropsPunt(Puntero propsPunt) {this.propsPunt = propsPunt;}
	public Puntero getPropsPunt() {return propsPunt;}
	public void setPropsArray(Array propsArray) {this.propsArray = propsArray;}
	public Array getPropsArray() {return propsArray;}
	public void setPropsProc(Procedimiento propsProc) {this.propsProc = propsProc;}
	public Procedimiento getPropsProc() {return propsProc;}
	public void setPropsVar(Variable propsVar) {this.propsVar = propsVar;}
	public Variable getPropsVar() {return propsVar;}
}
